home *** CD-ROM | disk | FTP | other *** search
- {$A+,B-,D-,E-,F-,G+,I+,L-,N-,O-,R-,S-,V+,X+}
- {$M 16384,0,655360}
-
- { MDiskpro (c) Emilio David Diaus 1993,1994 }
-
- { Hecho Por Makecode (C) Emilio David Diaus 1993 }
- {$Ifndef Ver60 }
- Error: Necesario Turbo Pascal 6.0
- {$Endif}
-
- {
- 3. Mdiskpro: MαDulo Principal Del Programa
-
- Para La CompilacióN De Este Programa Es Necesario Turbo Pascal
- 6.0 O Superior.
- En Este Programa Podemos Ver Los Siguientes Objetos:
-
- Tmyapp - Es Un Sucesor De Tapplication En El Que Se Han
- Cambiado Los Siguientes MéTodos:
- Constructor Tmyapp.Init; - Inicializa La Aplicación
- Los Recuadros, Los ParáMetros Y La PresentacióN Del
- Programa.
- Procedure Tmyapp.Getevent - Modificado Para Dar
- Soporte A La Ayuda, AdemáS Obtiene Los Sucesos Del
- Programa.
- Function Tmyapp.Getpalette - Modificado Para Dar Color
- A Las Ventanas De Ayuda.
- Procedure Outofmemory - Modificado Para Mostrar Un
- Mensaje En EspañOl Si Hay AlgúN Problema De Memoria.
- Procedure Handleevent - Maneja Los Sucesos Del
- Programa.
- Procedure Initmenubar - Modificado Para Mostrar La
- Barra De Menú Del Programa.
- Procedure Initstatusline - Modificado Para Mostrar La
- LíNea De Estado.
- Procedure Done - Libera La Memoria Y Devuelve El
- Ordenador Al Estado Anterior Al De Ejecutar El
- Programa.
- Y Se Han AñAdido Los Siguientes TambiéN:
- Change_Drive - Permite Mediante Una Caja De DiáLogo
- Cambiar De Unidad De Disquete, Utiliza Select_Drive.
- Select_Drive - Selecciona Una Unidad De Disquete.
- AdemáS Se Han AñAdido Las Siguientes Variables:
- Bdrive - Unidad A Procesar.
- Icopies - NúMero De Copias A Realizar.
- Bo_Verify - Bandera De VerificacióN De Las Copias.
- Y Otros Procedimientos Fuera De Tmyapp:
- Change_Window - Cuando Se Está Bajo Os/2 Cambia El
- Nombre De La Ventana Del Programa Y Lo Restaura Al
- Salir.
- Find_Exe_Name - Averigua Desde Que Ruta Se Ejecuta El
- Programa, Vital Para El Sistema De Ayuda.
- Y Otras Variables TambiéN Fuera Del Objeto:
- Comandos Referidos A Acciones Del Usuario Cmxxxx.
- Swhereis - Ruta Donde Está Ubicado El Programa.
- Mdiskpro Sigue La Estructura EstáNdar De RealizacióN De Programas
- Init, Run Y Done Y El Sistema De Sucesos Similar A Que TendríAmos
- Al Programar Para Windows U Otros Sistemas Operativos Como Os/2
- O Apple System 7. }
- Program Mdiskpro;
- Uses Dos,Objects,Drivers,Views,Menus,Dialogs,Emimsbox,Emiapp,Mhelp,Mdhelp,Fonts,
- Mcopy,Opciones,Mdiskerr,Test286,Mtvprot;
-
- Const
- Cmcopy = $100;
- Cmsandc = $101;
- Cminterr = $102;
- Cmnothing = $103;
- Cmopt = $104;
- Swhere : String='';
- Scopyright : String=' MicroDisk Pro v 2.5 (c) Emilio David Diaus 1994 ';
-
-
- Type
- Tmyapp=Object(Tapplication)
- Bdrive : Byte;
- Icopies : Integer;
- Wflags : Word;
- Sfile : String;
- Constructor Init;
- Destructor Done; Virtual;
-
- Function Select_Drive:Word;
- Function Change_Drive:Word;
- Procedure Change_Window(Sname:String);
- Procedure Writehelp;Virtual;
-
- Procedure Getevent(Var Event: Tevent); Virtual;
- Function Getpalette:Ppalette; Virtual;
- Procedure Outofmemory; Virtual;
- Procedure Handleevent(Var Event: Tevent); Virtual;
- Procedure Initmenubar; Virtual;
- Procedure Initstatusline; Virtual;
-
- End;
-
- Type
- Trdialogdata = Record
- Wdrive: Word;
- End;
-
- Function Tmyapp.Select_Drive:Word;
-
- Var
- Drives_View : Pview;
- Chgdialog : Pdialog;
- Rs : Trect;
- Wresult : Word;
- Bloop,Bdrives_Found : Byte;
- Sdrive : String[11];
- Data : Trdialogdata;
- This_Item,First_Item : Psitem;
-
- Function Find_Drives(Vfbadaptor:Byte):Word;Assembler;
- Asm
- Mov Ah,08h
- Mov Dl,Vfbadaptor
- Int 13h
- Xor Dh,Dh
- Mov Ax,Dx
- End;
-
- Begin
- Bdrives_Found:=Find_Drives(Opciones_Programa.Adaptador);
- If (Bdrives_Found=1) Then Bdrives_Found:=2;
- If Bdrives_Found>6 Then Bdrives_Found:=6;
- Data.Wdrive:=Opciones_Programa.Unidad;
- If Bdrives_Found<Data.Wdrive Then Bdrives_Found:=Byte(Data.Wdrive)+1;
- Rs.Assign(20, 6, 60, 19);
- Chgdialog := New(Pdialog, Init(Rs, 'Seleccionar unidad'));
- With Chgdialog^ Do
- Begin
- Rs.Assign(13, 4,27,5+Bdrives_Found-1);
- For Bloop:=0 To Bdrives_Found-1 Do Begin
- Sdrive:='Unidad ~'+Chr(Bloop+65)+'~ ';
- If Bloop=0 Then Begin
- This_Item:=Newsitem(Sdrive,Nil);
- First_Item:=This_Item;
- End Else Begin
- This_Item^.Next:=Newsitem(Sdrive,Nil);
- This_Item:=This_Item^.Next;
- End;
- End;
- Drives_View:= New(Pradiobuttons, Init(Rs,First_Item));
- Insert(Drives_View);
- Rs.Assign(13, 3, 23, 4);
- Insert(New(Plabel, Init(Rs, '~U~nidades ', Drives_View)));
- Rs.Assign(12, 10, 22, 12);
- Insert(New(Pbutton, Init(Rs, '~O~k', Cmok, Bfdefault)));
- Rs.Assign(25, 10, 37, 12);
- Insert(New(Pbutton, Init(Rs, '~C~ancelar', Cmcancel, Bfnormal)));
- Setdata(Data);
- End;
- Chgdialog^.Selectnext(False);
- Wresult := Desktop^.Execview(Chgdialog);
- If Wresult <> Cmcancel Then Begin
- Chgdialog^.Getdata(Data);
- Bdrive:=Lo(Data.Wdrive);
- Select_Drive:=0;
- End Else
- Select_Drive:=Wresult;
- Dispose(Chgdialog, Done);
- End;
-
- Function Tmyapp.Change_Drive:Word;
-
- Var Bswap:Byte;
- Wresult:Word;
-
- Label Salida;
-
- Begin
- Bswap:=Bdrive;
- Wresult:=Select_Drive;
- If Wresult=Cmcancel Then
- Bdrive:=Bswap;
- Change_Drive:=Wresult;
- End;
-
- { Para su uso con OS/2 }
- Procedure Tmyapp.Change_Window(Sname:String);
- Var R:Registers;
- Begin
- R.Ah:=$64;
- R.Dx:=$0001;
- R.Cx:=$636C;
- R.Bx:=0;
- R.Es:=Seg(Sname[1]);
- R.Di:=Ofs(Sname[1]);
- Msdos(R);
- End;
-
- Function Find_Exe_Name: Pathstr;
- Var
- Sexename: Pathstr;
- Sdir: Dirstr;
- Sname: Namestr;
- Sext: Extstr;
- Begin
- Sexename := Paramstr(0);
- If Sexename='' Then
- Sexename := Fsearch('MDISKPRO.EXE',Getenv('PATH'));
- Fsplit(Sexename, Sdir, Sname, Sext);
- If Length(Sdir)>0 Then
- If Sdir[Length(Sdir)]<>'\' Then Sdir:=Sdir+'\';
- Find_Exe_Name := Sdir;
- End;
-
- Procedure Tmyapp.Writehelp;
- Begin
- Writeln(' MDISKPRO [X:] [/XXX] [/Fnombre] [/FCnombre] [/H|/?]');
- Writeln;
- Writeln(' X: Unidad de disquete que se va a utilizar para la copia.');
- Writeln(' /Fnombre Nombre del archivo imagen del disquete a crear.');
- Writeln(' Sin especificar ruta: /fnoname.dat.');
- Writeln(' /FCnombre Nombre del archivo imagen del disquete a utilizar.');
- Writeln(' Sin especificar ruta: /fcnoname.dat.');
- Writeln(' /XXX Número de copias del disquete.');
- Writeln(' /H o /? Imprime esta pantalla de ayuda.');
- Halt;
- End;
-
- Constructor Tmyapp.Init;
- Var Bloop,Bloop2:Byte;
- Spar:String;
- Icode:Integer;
- Ev:Tevent;
- Begin
- Writeln(Scopyright);
- If (Paramcount>0) And ((Paramstr(1)='/?') Or (Paramstr(1)='/H')) Then
- Writehelp;
- Registerhelpfile;
- Swhere:=Find_Exe_Name;
- Screenmode:=Smco80;
- Tapplication.Init;
- Lee_Opciones(Swhere+'MDISK.INI');
- Inicializar_Fuentes;
- If Not(Comprueba_Codigo(Scopyright,6322)) Then Activa_Proteccion;
- If Lo(Dosversion)>=20 Then Change_Window('MDISK OS/2'#0);
- Wflags:=0;
- If Opciones_Programa.Verificar=1 Then
- Wflags:=Wflags Or Fpverify;
- Bdrive:=Byte(Opciones_Programa.Unidad);
- For Bloop:=1 To Paramcount Do Begin
- Spar:=Paramstr(Bloop);
- For Bloop2:=1 To Length(Spar) Do Spar[Bloop2]:=Upcase(Spar[Bloop2]);
- If (Spar[1]='/') And (Spar<>'/V') Then
- Val(Copy(Spar,2,Length(Spar)),Icopies,Icode);
- If (Length(Spar)=2) And (Spar[2]=':')
- And (Spar[1] In ['A'..'Z']) Then Bdrive:=Ord(Spar[1])-65;
- If Spar='/V' Then Wflags:=Wflags Or Fpverify;
- If (Copy(Spar,1,2)='/F') Then Begin
- Sfile:=Copy(Spar,3,Length(Spar));
- Wflags:=Wflags Or Fptofile;
- End;
- If (Copy(Spar,1,3)='/FC') Then Begin
- Sfile:=Copy(Spar,4,Length(Spar));
- Wflags:=Wflags Or Fpfromfile;
- End;
- End;
- If Icode<>0 Then Val(Opciones_Programa.Copias,Icopies,Icode);
- If (Paramcount>0) And (Bdrive<>255) Then Begin
- Ev.What:=Evcommand;
- Ev.Command:=Cmcopy;
- Putevent(Ev);
- End;
- End;
-
- Destructor Tmyapp.Done;
- Begin
- If Lo(Dosversion)>=20 Then Change_Window(''#0);
- If Modif_Op Then Begin
- Modif_Op:=False;
- Escribe_Opciones(Swhere+'MDISK.INI');
- End;
- Setvideomode(Startupmode);
- Tapplication.Done;
- End;
-
- Procedure Tmyapp.Getevent(Var Event: Tevent);
- Var
- W: Pwindow;
- Hfile: Phelpfile;
- Helpstrm: Pdosstream;
- Const
- Helpinuse: Boolean = False;
- Begin
- Tapplication.Getevent(Event);
- Case Event.What Of
- Evcommand:
- If (Event.Command = Cmhelp) And Not Helpinuse Then
- Begin
- Helpinuse := True;
- Helpstrm := New(Pdosstream, Init(Swhere+'MDISK.HLP', Stopenread));
- Hfile := New(Phelpfile, Init(Helpstrm));
- If Helpstrm^.Status <> Stok Then
- Begin
- Messagebox('No pude abrir MDISK.HLP.', Nil, Mferror + Mfokbutton);
- Dispose(Hfile, Done);
- End
- Else
- Begin
- W := New(Phelpwindow,Init(Hfile, Gethelpctx));
- If Validview(W) <> Nil Then
- Begin
- Execview(W);
- Dispose(W, Done);
- End;
- Clearevent(Event);
- End;
- Helpinuse := False;
- End;
- End;
- End;
-
- Function Tmyapp.Getpalette: Ppalette;
- Const
- Cnewcolor = Ccolor + Chelpcolor;
- Cnewblackwhite = Cblackwhite + Chelpblackwhite;
- Cnewmonochrome = Cmonochrome + Chelpmonochrome;
- P: Array[Apcolor..Apmonochrome] Of String[Length(Cnewcolor)] =
- (Cnewcolor, Cnewblackwhite, Cnewmonochrome);
- Begin
- Getpalette := @P[Apppalette];
- End;
-
- Procedure Tmyapp.Outofmemory;
- Begin
- Messagebox('Memoria insuficiente para esta operación.',
- Nil, Mferror + Mfokbutton);
- Done;
- Exit;
- End;
-
- Procedure Tmyapp.Handleevent(Var Event: Tevent);
- Begin
- Tapplication.Handleevent(Event);
- If (Event.What=Evcommand) Then
- Case Event.Command Of
- Cmsandc:
- If Change_Drive<>Cmcancel Then
- Copy_Disk(Bdrive,Icopies,Wflags,Sfile);
- Cmcopy:Copy_Disk(Bdrive,Icopies,Wflags,Sfile);
- Cmopt:Muestra_Opciones;
- Else Exit;
- End;
- Clearevent(Event);
- End;
-
- Procedure Tmyapp.Initmenubar;
- Var R:Trect;
- Pt:Pstatictext;
- Sline:String;
- Begin
- Getextent(R);
- R.B.Y := R.A.Y + 1;
- Sline:=Scopyright+' ['+Swhere+']';
- Pt:=New(Pstatictext,Init(R,Sline));
- Insert(Pt);
- Inc(R.A.Y);Inc(R.B.Y);
- Menubar := New(Pmenubar, Init(R, Newmenu(
- Newsubmenu('~D~iscos ',Hcnocontext, Newmenu(
- Newitem('~C~opiar', 'Alt-C', Kbaltc, Cmsandc,Hccdisco,
- Newitem('~O~pciones ...', 'Alt-O', Kbalto, Cmopt,Hcopciones,
- Newitem('~S~alir', 'Alt-X',Kbaltx, Cmquit,Hcsalir,
- Nil)))),Nil))));
- End;
-
- Procedure Tmyapp.Initstatusline;
- Var R:Trect;
- Begin
- Getextent(R);
- R.A.Y := R.B.Y - 1;
- Statusline := New(Pstatusline, Init(R,
- Newstatusdef(0, $Ffff,
- Newstatuskey('', Kbf10, Cmmenu,
- Newstatuskey('~F1~ Ayuda', Kbf1, Cmhelp,
- Newstatuskey('~Alt-X~ Salir', Kbaltx, Cmquit,
- Newstatuskey('~Esc~ Interrumpir acción', Kbnokey,Cmnothing,
- Nil)))),
- Nil)
- ));
- End;
-
- Var Myapp:Tmyapp;
-
- Begin
- Myapp.Init;
- Myapp.Run;
- Myapp.Done;
- End.
-